Log
纪录登录共享记忆体的特定数据。
语法
KsCommandStatus Log(
int Length,
KsLogChannel* Channels,
int TriggerChannel,
double TriggerValue,
KsLogTriggerType TriggerType,
double Duration
);
参数
Length:储存登录通道的阵列长度,最多为八个通道。
Channels:各通道里将被记录的数据。请见 KsLogChannel 结构。
TriggerChannel:触发记录的通道。
TriggerValue:纪录会在登录通道值达到触发值时开始。
TriggerType:触发纪录的方式。请见 KsLogTriggerType 。
Duration:欲记录数据的时间长度,每秒为一单位,最多可记录 10 分钟。若设置为零,系通将继续记录并保存最后 10 分钟的数据。
回传值
返回 KsCommandStatus 结构。
- Value:纪录共享记忆体指标。
- ValueLength:欲纪录的所有点数量。
- InSyn:当前的纪录索引(亦为以记录的点数量)。
备注
使用 RtOpenSharedMemory 以获取纪录数据时,必须使用 "KSLogSpace" 作为共享记忆体物件之名称。
可用的 EtherCAT 状态
ecatOP
范例
复制
double* LogData = NULL;
KsLogChannel Channels[3] =
{
{KsLogSource::logAxis, 0, KsLogVariable::logActualPosition, 0, KsLogDataType::logDouble},
{KsLogSource::logAxis, 0, KsLogVariable::logActualVelocity, 0, KsLogDataType::logDouble},
{KsLogSource::logAxis, 0, KsLogVariable::logFollowingError, 0, KsLogDataType::logDouble}
};
// Stop current log
KsCommandStatus cmdStopLog = WaitForCommand(1, TRUE, StopLog());
if (!cmdStopLog.Error)
{
// Log for 10 seconds
KsCommandStatus cmdLog = Log(3, Channels, 0, 0, KsLogTriggerType::logImmediately, 10);
cmdLog = WaitForCommand(11, TRUE, cmdLog);
if (cmdLog.Done)
{
// Open log space
HANDLE hLogMem = RtOpenSharedMemory(SHM_MAP_READ, FALSE, L"KSLogSpace", (void**)&LogData);
double* data = (double*)malloc(sizeof(double) * 3 * (cmdLog.ValueLength));
memcpy((void*)data, (void*)LogData, sizeof(double) * 3 * (cmdLog.ValueLength));
RtCloseHandle(hLogMem); // Close log space
// Access to log data
free(data);
}
}
使用需求
RT | Win32 | |
---|---|---|
最低支援版本 | 4.0 | 4.0 |
标头档 | ksapi.h | ksapi.h |
程式库 | KsApi_Rtss.lib | KsApi.lib |
参见